import os
import pandas as pd
from tools.getDataBase import get_conn
import warnings

warnings.filterwarnings("ignore")

# 获取当前文件所在目录的绝对路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
TOOLS_DIR = os.path.join(BASE_DIR, 'data')
# 确保目录存在
if not os.path.exists(TOOLS_DIR):
    os.mkdir(TOOLS_DIR)


# 数据获取
def dataExport():
    # 创建数据库的连接对象
    conn, cursor = get_conn()
    sql = 'select id, directors ,rate ,title ,casts ,year ,types ,country ,lang ,time ,movieTime ,commentLen ,star from  movies'
    # 使用pandas读取数据
    data = pd.read_sql(sql, conn)
    # 保存为CSV文件
    if not data.empty:
        data.to_csv(os.path.join(TOOLS_DIR, 'moviesData.csv'), index=False, encoding='utf-8')
    else:
        print('查询结果为空，未导出数据！')


# 统计电影类型TOP5数量
def typesData():
    # 读取数据
    data = pd.read_csv(os.path.join(TOOLS_DIR, 'moviesData.csv'), encoding='utf-8')
    # expand扩展为一个数据框，level表示去掉多余的层次，drop=True删掉原来的索引，保存为一维series
    df_split = data['types'].str.split(',', expand=True).stack().reset_index(level=1, drop=True)
    # 统计每个类型的数量
    type_counts = df_split.value_counts()
    # 构建新的标签
    type_counts_df = type_counts.reset_index()
    type_counts_df.columns = ['类型', '数量']
    # 获取前五个数据
    data01 = type_counts_df.head()
    # 将结果写入CSV文件中
    data01.to_csv(os.path.join(TOOLS_DIR, 'type_counts.csv'), index=False, encoding='utf-8')


# 统计年份电影TOP5数量
def yearsData():
    # 读取数据
    data = pd.read_csv(os.path.join(TOOLS_DIR, 'moviesData.csv'), encoding='utf-8')
    # 统计每个年份的数量
    year_counts = data['year'].value_counts()
    # 将结果转换成DataFrame
    year_counts_df = year_counts.reset_index()
    # 构建新的标签
    year_counts_df.columns = ['年份', '数量']
    data02 = year_counts_df.head(5)
    # 将结果写入CSV文件中
    data02.to_csv(os.path.join(TOOLS_DIR, 'year_counts.csv'), index=False, encoding='utf-8')


# 统计中英文电影占比
def langData():
    # 读取数据
    data = pd.read_csv(os.path.join(TOOLS_DIR, 'moviesData.csv'), encoding='utf-8')
    # expand扩展为一个数据框，level表示去掉多余的层次，drop=True删掉原来的索引，保存为一维series
    df_split = data['lang'].str.split(',', expand=True).stack().reset_index(level=1, drop=True)
    # 统计每个语言的数量
    language_counts = df_split.value_counts()
    # 将结果转换成DataFrame
    language_counts_df = language_counts.reset_index()
    # 构建新的标签
    language_counts_df.columns = ['语言', '数量']
    data03 = language_counts_df.head(2)
    # 将结果写入CSV文件中
    data03.to_csv(os.path.join(TOOLS_DIR, 'lang_counts.csv'), index=False, encoding='utf-8')


# 统计电影评论TOP5数量
def commentsData():
    # 读取数据
    data = pd.read_csv(os.path.join(TOOLS_DIR, 'moviesData.csv'), encoding='utf-8')
    # 将评论数据转为整数类型
    data['commentLen'] = data['commentLen'].astype(int)
    # 去除重复的电影名称
    data = data.drop_duplicates(subset=['title'])
    # 根据commentLen列对数据进行排序
    top5_comments = data.sort_values(by='commentLen', ascending=False).head(5)
    # 获取电影名字和评论数量
    top5_comments = top5_comments[['title', 'commentLen']]
    # 构建新的标签
    top5_comments.columns = ['电影', '数量']
    # 将结果写入CSV文件中
    top5_comments.to_csv(os.path.join(TOOLS_DIR, 'comment_counts.csv'), index=False, encoding='utf-8')


# 统计不同国家电影数量
def countryData():
    # 读取数据
    data = pd.read_csv(os.path.join(TOOLS_DIR, 'moviesData.csv'), encoding='utf-8')
    # 将空值替换为‘中国大陆’
    data['country'] = data['country'].fillna('中国大陆')
    # expand扩展为一个数据框，level表示去掉多余的层次，drop=True删掉原来的索引，保存为一维series
    df_split = data['country'].str.split(',', expand=True).stack().reset_index(level=1, drop=True)
    # 统计数量
    country_counts = df_split.value_counts()
    # 将结果转换成DataFrame
    country_counts_df = country_counts.reset_index()
    # 构建新的标签
    country_counts_df.columns = ['国家', '数量']
    data05 = country_counts_df.head(10)
    data05.to_csv(os.path.join(TOOLS_DIR, 'country_counts.csv'), index=False, encoding='utf-8')


def mainFun():
    dataExport()
    typesData()
    yearsData()
    langData()
    commentsData()
    countryData()


if __name__ == '__main__':
    mainFun()
